#!/bin/bash

#=============================================================================
# 云打印机基础系统快速启动脚本
# Cloud Printer Quick Start Script
#
# 这是一个简化版的启动脚本，用于快速启动已配置好的服务
# 适合开发测试和日常使用
#
# 用法:
#   ./quick_start.sh          # 交互式启动
#   ./quick_start.sh direct   # 直接启动
#   ./quick_start.sh systemd  # systemd服务启动
#   ./quick_start.sh stop     # 停止服务
#   ./quick_start.sh status   # 查看状态
#=============================================================================

# 项目配置
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VENV_DIR="${PROJECT_DIR}/venv"
CONFIG_PATH="/etc/cloud-printer/ble_config.yaml"

# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# 打印函数
info() { echo -e "${BLUE}[INFO]${NC} $1"; }
success() { echo -e "${GREEN}[OK]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }

# 检查基本环境
check_environment() {
    info "检查运行环境..."
    
    # 检查项目目录
    if [[ ! -d "$PROJECT_DIR/src" ]]; then
        error "项目源码目录不存在: $PROJECT_DIR/src"
        return 1
    fi
    
    # 检查Python虚拟环境
    if [[ ! -f "$VENV_DIR/bin/activate" ]]; then
        warn "虚拟环境不存在，请先运行: ./start_service.sh --install"
        return 1
    fi
    
    # 检查蓝牙服务
    if ! systemctl is-active --quiet bluetooth; then
        warn "蓝牙服务未运行，尝试启动..."
        sudo systemctl start bluetooth || {
            error "无法启动蓝牙服务"
            return 1
        }
    fi
    
    success "环境检查完成"
    return 0
}

# 直接启动服务
start_direct() {
    info "正在直接启动BLE服务..."
    
    # 激活虚拟环境
    source "$VENV_DIR/bin/activate" || {
        error "无法激活虚拟环境"
        return 1
    }
    
    # 设置环境变量
    export PYTHONPATH="$PROJECT_DIR"
    export BLE_CONFIG_PATH="$CONFIG_PATH"
    
    # 进入项目目录
    cd "$PROJECT_DIR"
    
    # 选择可用的入口点
    if [[ -f "src/network/service.py" ]]; then
        info "启动网络服务模块..."
        success "服务已启动，按Ctrl+C停止"
        python3 -m src.network.service --config "$CONFIG_PATH"
    elif [[ -f "src/ble/gatt_server.py" ]]; then
        info "启动BLE GATT服务器..."
        success "服务已启动，按Ctrl+C停止"
        python3 -m src.ble.gatt_server
    else
        error "未找到可用的服务入口点"
        return 1
    fi
}

# systemd服务管理
manage_systemd() {
    local action=$1
    local service_name="cloud-printer-ble"
    
    case $action in
        start)
            info "启动systemd服务..."
            sudo systemctl start $service_name
            sleep 2
            if systemctl is-active --quiet $service_name; then
                success "服务启动成功"
                sudo systemctl status $service_name --no-pager -l
            else
                error "服务启动失败"
                sudo journalctl -u $service_name --no-pager -l | tail -20
                return 1
            fi
            ;;
        stop)
            info "停止systemd服务..."
            sudo systemctl stop $service_name
            success "服务已停止"
            ;;
        restart)
            info "重启systemd服务..."
            sudo systemctl restart $service_name
            sleep 2
            if systemctl is-active --quiet $service_name; then
                success "服务重启成功"
            else
                error "服务重启失败"
                return 1
            fi
            ;;
        status)
            info "查看服务状态..."
            sudo systemctl status $service_name --no-pager -l
            ;;
        logs)
            info "查看服务日志..."
            sudo journalctl -u $service_name -f
            ;;
    esac
}

# 停止所有相关进程
stop_all() {
    info "停止所有云打印服务进程..."
    
    # 停止systemd服务
    if systemctl is-active --quiet cloud-printer-ble; then
        sudo systemctl stop cloud-printer-ble
        success "systemd服务已停止"
    fi
    
    # 停止直接启动的进程
    pkill -f "python3 -m src.ble.gatt_server" && success "GATT服务进程已停止"
    pkill -f "python3 -m src.network.service" && success "网络服务进程已停止"
    
    success "所有服务进程已停止"
}

# 显示服务状态
show_status() {
    info "云打印机服务状态检查"
    echo "----------------------------------------"
    
    # 检查systemd服务
    if systemctl is-active --quiet cloud-printer-ble; then
        success "systemd服务: 运行中"
    else
        warn "systemd服务: 未运行"
    fi
    
    # 检查直接启动的进程
    if pgrep -f "python3 -m src.ble.gatt_server" > /dev/null; then
        success "GATT服务进程: 运行中"
    elif pgrep -f "python3 -m src.network.service" > /dev/null; then
        success "网络服务进程: 运行中"
    else
        warn "直接启动进程: 未运行"
    fi
    
    # 检查蓝牙服务
    if systemctl is-active --quiet bluetooth; then
        success "蓝牙系统服务: 运行中"
    else
        error "蓝牙系统服务: 未运行"
    fi
    
    # 检查蓝牙适配器
    if command -v hciconfig >/dev/null && hciconfig >/dev/null 2>&1; then
        local adapters=$(hciconfig | grep "UP RUNNING" | wc -l)
        if [[ $adapters -gt 0 ]]; then
            success "蓝牙适配器: $adapters 个活动"
        else
            warn "蓝牙适配器: 无活动适配器"
        fi
    else
        warn "蓝牙适配器: 无法检查"
    fi
    
    echo "----------------------------------------"
}

# 显示帮助信息
show_help() {
    echo "云打印机基础系统快速启动脚本"
    echo ""
    echo "用法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  direct     直接启动服务（前台运行）"
    echo "  systemd    启动systemd服务（后台运行）"
    echo "  stop       停止所有服务"
    echo "  restart    重启systemd服务"
    echo "  status     显示服务状态"
    echo "  logs       查看服务日志"
    echo "  help       显示此帮助信息"
    echo ""
    echo "无参数运行时进入交互模式"
}

# 交互式菜单
interactive_menu() {
    echo ""
    echo -e "${BLUE}云打印机服务快速启动${NC}"
    echo "=========================="
    echo "1) 直接启动 (前台运行)"
    echo "2) systemd启动 (后台服务)" 
    echo "3) 停止所有服务"
    echo "4) 查看服务状态"
    echo "5) 查看服务日志"
    echo "6) 重启服务"
    echo "q) 退出"
    echo ""
    
    read -p "请选择 [1-6,q]: " choice
    
    case $choice in
        1) start_direct ;;
        2) manage_systemd start ;;
        3) stop_all ;;
        4) show_status ;;
        5) manage_systemd logs ;;
        6) manage_systemd restart ;;
        q|Q) info "退出程序"; exit 0 ;;
        *) error "无效选择"; return 1 ;;
    esac
}

# 主程序
main() {
    # 检查运行环境
    if ! check_environment; then
        error "环境检查失败，请先运行完整安装脚本"
        echo "  ./start_service.sh --install"
        exit 1
    fi
    
    # 处理命令行参数
    case ${1:-interactive} in
        direct)
            start_direct
            ;;
        systemd)
            manage_systemd start
            ;;
        stop)
            stop_all
            ;;
        restart)
            manage_systemd restart
            ;;
        status)
            show_status
            ;;
        logs)
            manage_systemd logs
            ;;
        help|--help|-h)
            show_help
            ;;
        interactive)
            interactive_menu
            ;;
        *)
            error "未知参数: $1"
            show_help
            exit 1
            ;;
    esac
}

# 信号处理
trap 'info "接收到退出信号"; stop_all; exit 0' SIGINT SIGTERM

# 执行主程序
main "$@"